transform: Readd optimization
authorBenjamin Otte <otte@redhat.com>
Mon, 4 Mar 2019 20:43:44 +0000 (21:43 +0100)
committerBenjamin Otte <otte@redhat.com>
Mon, 4 Mar 2019 22:41:51 +0000 (23:41 +0100)
This is the optimization from bbd4e2f60d9e060fbe3b0c2dcebcd1d6b7335a2a

gsk/gsktransform.c

index a9c75c7599128bb06a1e2d23664a77b84d6a1c2f..b434d4cb31748c0a46534b3740bf913ade127f63 100644 (file)
@@ -1510,9 +1510,33 @@ gsk_transform_transform_bounds (GskTransform          *self,
                                 const graphene_rect_t *rect,
                                 graphene_rect_t       *out_rect)
 {
-  graphene_matrix_t mat;
+  switch (gsk_transform_get_category (self))
+    {
+    case GSK_TRANSFORM_CATEGORY_IDENTITY:
+      graphene_rect_init_from_rect (out_rect, rect);
+      break;
+
+    case GSK_TRANSFORM_CATEGORY_2D_TRANSLATE:
+      {
+        float dx, dy;
+
+        gsk_transform_to_translate (self, &dx, &dy);
+        graphene_rect_offset_r (rect, dx, dy, out_rect);
+      }
+    break;
+
+    case GSK_TRANSFORM_CATEGORY_UNKNOWN:
+    case GSK_TRANSFORM_CATEGORY_ANY:
+    case GSK_TRANSFORM_CATEGORY_3D:
+    case GSK_TRANSFORM_CATEGORY_2D:
+    case GSK_TRANSFORM_CATEGORY_2D_AFFINE:
+    default:
+      {
+        graphene_matrix_t mat;
 
-  /* XXX: vfuncify */
-  gsk_transform_to_matrix (self, &mat);
-  graphene_matrix_transform_bounds (&mat, rect, out_rect);
+        gsk_transform_to_matrix (self, &mat);
+        graphene_matrix_transform_bounds (&mat, rect, out_rect);
+      }
+      break;
+    }
 }